<?php
/**
分页类
**/

class Core_Lib_Page{
	public $first_row;   //起始行数
	public $list_rows;   //每页行数
	protected $total_pages; //总页数
	protected $total_rows;  //总行数
	protected $now_page;    //当前页数
	protected $method = 'default';  //处理情况 Ajax，html
	protected $parameter = '';
	protected $page_name = 'nowPage'; //分页参数的名称,当前是第几页的参数
	protected $ajax_func_name;
	public $plus = 3;  //分页偏移量
	protected $url;

	/**
	*构造函数
	**/
	public function __construct($data = array()){
		$this->total_rows = $data['total_rows'];
		$this->parameter = !empty($data['parameter'])?$data['parameter']:'';
		$this->list_rows = !empty($data['list_rows']) && $data['list_rows'] <= 100 ? $data['list_rows']:50;
		$this->total_pages = ceil($this->total_rows / $this->list_rows);
		$this->ajax_func_name = !empty($data['ajax_func_name'])?$data['ajax_func_name']:'goToPage';
		$this->method = !empty($data['method'])?$data['method']:'';

		/** 当前页面 **/
		if(!empty($data['now_page'])){
			$this->now_page = intval($data['now_page']);
		}else{
			$this->now_page = !empty($_GET[$this->page_name])?intval($_GET[$this->page_name]):1;
		}
		$this->now_page = $this->now_page <= 0? 1:$this->now_page;

		if(!empty($this->total_pages) && $this->now_page > $this->total_pages){
			$this->now_page = $this->total_pages;
		}
		$this->first_row = $this->list_rows * ($this->now_page - 1);

	}//end function _construct



	/**
	*得到当前链接
	**/
	protected function _get_link($page,$text){
		switch ($this->method){
			case 'ajax':
				$parameter = '';
				if($this->parameter){
					$parameter = ','.$this->parameter;
				}
				return '<a onclick="' . $this->ajax_func_name . '(\'' . $page . '\''.$parameter.')"href="javascript:void(0)">' . $text . '</a>' . "\n";
			break;

			case 'html':
				$url = str_replace('?', $page,$this->parameter);
				return '<a href="' .$url . '">' . $text . '</a>' . "\n";
			 break;

			 default:
				 return '<a href="' . $this->_get_url($page) . '">' . $text . '</a>' . "\n";
			 break;

		}
	}//end function _get_link


	/**
	*设置当前页面链接
	**/
	protected function _set_url(){
		$url  =  $_SERVER['REQUEST_URI'].(strpos($_SERVER['REQUEST_URI'],'?')?'':"?").$this->parameter;
		$parse = parse_url($url);
		if(isset($parse['query'])) {
			parse_str($parse['query'],$params);
			unset($params[$this->page_name]);
			$url   =  $parse['path'].'?'.http_build_query($params);
		}

		if(!empty($params)){
			$url .= '&';
		}

		$this->url = $url;
	}//end function _set_url


	/**
	*得到$page的url
	**/
	 protected function _get_url($page){
		 if($this->url === NULL){
			 $this->_set_url();  
		 }
		 return $this->url . $this->page_name . '=' . $page;
	 }//end function _get_url


	 /**
	 *得到第一页
	 **/
	 public function first_page($name = '第一页'){
		 if($this->now_page > 5){
			 return $this->_get_link('1', $name);
		 }
		  return '';
	 }//end function first_page


	 /**
	 *最后一页
	 **/
	 public function last_page($name = '最后一页'){
		 if($this->now_page < $this->total_pages - 5){
			  return $this->_get_link($this->total_pages, $name);
		 }
		 return '';
	 }//end function last_page


	 /**
	 *上一页
	 **/
	 public function up_page($name = '上一页'){
		 if($this->now_page != 1){
			 return $this->_get_link($this->now_page - 1, $name);
		 }
		 return '';
	 }//end function up_page



	 /**
	 *下一页
	 **/
	public function down_page($name = '下一页'){
		 if($this->now_page < $this->total_pages){
			 return $this->_get_link($this->now_page + 1, $name);
		 }
		 return '';
	}//end function down_page



	/**
	*分页样式1
	**/
	public function show($param = 1){
		if($this->total_rows < 1){
			return '';
		}
		$className = 'show_' . $param;
		$classNames = get_class_methods($this);
		if(in_array($className, $classNames)){
			return $this->$className();
		}
		return '';
	}//end function show



	protected function show_2(){
		if($this->total_pages != 1){
			$return = '';
			$return .= $this->up_page('<');
			for($i = 1;$i<=$this->total_pages;$i++){
				if($i == $this->now_page){
					$return .= "<a class='now_page'>$i</a>\n";
				}else{
					if($this->now_page-$i>=4 && $i != 1){
						$return .="<span class='pageMore'>...</span>\n";
						$i = $this->now_page-3;
					}else{
						if($i >= $this->now_page+5 && $i != $this->total_pages){
							$return .="<span>...</span>\n";
							$i = $this->total_pages;
						}
						$return .= $this->_get_link($i, $i) . "\n";
					}
				}
			}
			$return .= $this->down_page('>');
			return $return;
		}
	}//end function show_2



	protected function show_1(){
		$plus = $this->plus;
		if( $plus + $this->now_page > $this->total_pages){
			$begin = $this->total_pages - $plus * 2;
		}else{
			$begin = $this->now_page - $plus;
		}
		$begin = ($begin >= 1) ? $begin : 1;
		$return = '';
		$return .= $this->first_page();
		$return .= $this->up_page();
		for ($i = $begin; $i <= $begin + $plus * 2;$i++){
			 if($i>$this->total_pages){
				 break;
			 }
			 if($i == $this->now_page){
				 $return .= "<a class='now_page'>$i</a>\n";
			 }else{
				 $return .= $this->_get_link($i, $i) . "\n";
			 }
		}
		$return .= $this->down_page();
		$return .= $this->last_page();
		return $return;
	}//end function show_1
	


	protected function show_3(){
		$plus = $this->plus;
		if( $plus + $this->now_page > $this->total_pages){
			$begin = $this->total_pages - $plus * 2;
		}else{
			$begin = $this->now_page - $plus;
		}
		$begin = ($begin >= 1) ? $begin : 1;
		$return = '总计 ' .$this->total_rows. ' 个记录分为 ' .$this->total_pages. ' 页, 当前第 ' . $this->now_page . ' 页 ';
		$return .= ',每页 ';
		$return .= '<input type="text" value="'.$this->list_rows.'" id="pageSize" size="3"> ';
		$return .= $this->first_page()."\n";
		$return .= $this->up_page()."\n";
		$return .= $this->down_page()."\n";
		$return .= $this->last_page()."\n";
		$return .= '<select onchange="'.$this->ajax_func_name.'(this.value)" id="gotoPage">';
		for ($i = $begin;$i<=$begin+10;$i++){
			if($i>$this->total_pages){
				break;
			}
			if($i == $this->now_page){
				$return .= '<option selected="true" value="'.$i.'">'.$i.'</option>';
			}else{
				$return .= '<option value="' .$i. '">' .$i. '</option>';
			}
		}
		$return .= '</select>';
		return $return;
	}//end function show_3

  


}//end class
?>














































